package com.etc;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

public class ZooKeeperTest {
    ZooKeeper zk = null;
    /**
     * 初始化
     *
     */
    @Before
    public void  init() throws IOException {
        // 构造一个连接zookeeper的客户端对象                                //ip地址                           运行时间               监听
        zk = new ZooKeeper("192.168.88.5:2181,192.168.88.5:2181,192.168.88.5:2181",2000,null);
    }

    /**
     * 创建节点
     */
    @Test
    public  void testCreate() throws Exception {

        // 参数1：要创建的节点路径  参数2：数据  参数3：访问权限  参数4：节点类型
        String create = zk.create("/linyujie","dashuaige".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println(create);
        zk.close();
    }
    /**
     * 更新节点
     */
    @Test
    public void testSet() throws Exception {
        // 参数1：节点路径   参数2：数据    参数3：所要修改的版本，-1代表任何版本
        zk.setData("/linyujie","大帅哥".getBytes("UTF-8"),-1);
        zk.close();
    }

    /**
     *获得节点的内容
     */
    @Test
    public void testGet() throws Exception {
        // 参数1：节点路径    参数2：是否要监听    参数3：所要获取的数据的版本,null表示最新版本
        byte[] data = zk.getData("/linyujie",false,null);
        System.out.println(new String(data,"UTF-8"));
    }
    /**
     * 查看节点下的子节点
     */
    @Test
    public void testListChildren() throws KeeperException, InterruptedException {
        // 参数1：节点路径    参数2：是否要监听
        // 注意：返回的结果中只有子节点名字，不带全路径
        List<String> listChildren = zk.getChildren("/",false);
        for(String children : listChildren){
            System.out.println(children);
        }
        zk.close();
    }

    /**
     *  删除节点
     */
    @Test
    public void testRm() throws KeeperException, InterruptedException {
        zk.delete("/linyujie",-1);
        zk.close();
    }
}
